/**
 * 类型
 */
export class Type {

  /**
   * 日
   */
  public static DAY: string = "d+";
  /**
   * 月份
   */
  public static MONTH: string = "M+";
  /**
   * 年份
   */
  public static YEAR: string = "y+";
  /**
   * 小时
   */
  public static HOURS: string = "H+";
  /**
   * 分
   */
  public static MINUTES: string = "m+";
  /**
   * 秒
   */
  public static SECONDS: string = "s+";
  /**
   * 季度
   */
  public static QUARTER: string = "q+";
  /**
   * 毫秒
   */
  public static MILLISECONDS: string = "S";

}

/**
 * 获取零点
 * @param key
 * @param value
 */
export const getDateStringZero = () => {
  return getDateString("yyyy-MM-dd") + " 00:00:00";
}

/**
 * 获取日期
 *
 * @param format  格式化字符串
 * @param adds 加上或减去（type为类型，value为数值（可为负数为减））
 */
export const getDateString = (format: string, adds?: [{ type: string, value: number }]) => {
  let dateTime = new Date();
  let o = {
    [Type.MONTH]: dateTime.getMonth() + 1, // 月份
    [Type.DAY]: dateTime.getDate(), // 日
    [Type.HOURS]: dateTime.getHours(), // 小时
    [Type.MINUTES]: dateTime.getMinutes(), // 分
    [Type.SECONDS]: dateTime.getSeconds(), // 秒
    [Type.QUARTER]: Math.floor((dateTime.getMonth() + 3) / 3), // 季度
    [Type.MILLISECONDS]: dateTime.getMilliseconds() // 毫秒
  };
  // 类型加减
  adds?.forEach((add) => {
    // @ts-ignore
    o[add.type] = o[add.type] + add.value
  })
  if (/(y+)/.test(format)) {
    format = format?.replace(RegExp.$1, (dateTime.getFullYear() + "").substr(4 - RegExp.$1.length));
  }
  for (let k in o) {
    if (new RegExp("(" + k + ")").test(format)) {
      // @ts-ignore
      format = format?.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    }
  }
  return format;
}

/**
 * 获取昨天（不带时分秒）
 */
export const getYesterday = (format: string) => {
  return getDateString(format, [{type: Type.DAY, value: -1}])
}

/**
 * 获取昨天零点
 * @param key
 * @param value
 */
export const getYesterdayZero = () => {
  return getYesterday("yyyy-MM-dd") + " 00:00:00";
}

/**
 * 获取昨天最后一秒
 * @param key
 * @param value
 */
export const getYesterdayLast = () => {
  return getYesterday("yyyy-MM-dd") + " 23:59:59";
}

/**
 * 字符串转日期（必须为  yyyy-MM-dd HH:mm:ss）
 * @param string
 */
export const stringToDate = (string: string) => {
  return new Date(Date.parse(string.replace(/-/g, "/")))
}


